package model.PokerTP;
import java.util.Random;


public class Licytacja {
    private int[] tzakladow;//kto ile dorzuci� do puli 
    public int zaklad=0;//ca�a pula 
    public int kolej;//kto obstawia
    public int max=1;//najwy�sze obstawienie
    Player[] gracze;
    int g;//liczba graczy 
    //nowe rozdanie 
    Licytacja(Player[] gracze,int g){
        tzakladow=new int[g];
        for(int i=0;i<g;i++){
            tzakladow[i]=0;
        }
        this.gracze=gracze;
        this.g=g;
    }
    //nowe rozdanie wpisowe
    public void Wpisowe(int a){
        for(int i=0;i<g;i++){
            if(gracze[i].cash>5){
                zaklad+=a;
                gracze[i].cash-=a;
            }else
                tzakladow[i]=-2;
        }
        Random gen = new Random();
        kolej=gen.nextInt(g);
        System.out.println( "Pula"+" "+zaklad);
    }
    //ka�da licytacja
    public void Lic(){
        System.out.println( "Pula"+" "+zaklad+" "+gracze[kolej].getNazwa()+" "+gracze[kolej].cash);
        
        while(cmp()==1){
            
            if(gracze[kolej].cash<=-1){
                kolej=(kolej+1)%g;
            }
            switch(gracze[kolej].licytuj()){
                case "check":
                        if(check(gracze[kolej],kolej)==1){
                            kolej=(kolej-1)%g;
                            System.out.println("nie mo�na");
                        }else{
                            System.out.println(gracze[kolej].getNazwa()+" gracz czeka");
                        }
                        
                        break;
                case "bet":
                        if(bet(gracze[ kolej],kolej)==0){
                            kolej=(kolej-1)%g;
                            System.out.println("nie mo�na");
                        }
                        break;
                case "raise":
                        if(raise(gracze[ kolej], kolej)==1){
                            
                            System.out.println("All-in");
                        }
                        break;
                case "call":  
                        if(call(gracze[kolej],kolej)==1){
                            System.out.println("All-in");
                        }
                        break;
                case "fold":
                       fold(gracze[kolej],kolej);
                        break;
                default :
                        kolej=(kolej-1)%g;
                        System.out.println("z�y wyb�r");
                        break;
            }
            kolej=(kolej+1)%g;
            System.out.println( "Pula"+" "+zaklad+" "+gracze[kolej].getNazwa()+" "+gracze[kolej].cash);
        }
    }   
    public int check(Player a,int kolej){
        
        if(max>1){
            return 1;
        }
        return 0;
    }
    public int bet(Player a,int kolej){
       System.out.println("o ile");
       int tmp=0;
            if(max==1){
                tmp=a.ile();
                System.out.println(tmp);
                if (tmp>1&&tmp<a.cash){
                    max=tmp;
                    a.cash-=tmp;
                    tzakladow[kolej]=tmp;
                    zaklad=zaklad+tmp;
                    return 1;
                }else if(tmp==a.cash){
                    return all(a,kolej);
                }else
                    return 0;
            }else
                return 0;
        
    }
    public int raise(Player a, int kolej){
        System.out.println("o ile");
        int tmp=0;
        tmp=a.ile();
        if(call(a,kolej)==0){
            if(max+tmp<a.cash){
                tzakladow[kolej]+=tmp;
                max+=tmp;
                zaklad+=tmp;
                return 0;
            }else
                return all(a, kolej);
        }else
            return 1;
        
    }
    public int call(Player a, int kolej){
        if(max-tzakladow[kolej]>=a.cash){
            return all(a,kolej);
        }else{
            zaklad+=max-tzakladow[kolej];
            a.cash-=max-tzakladow[kolej];
            tzakladow[kolej]=max;
            return 0;
        }
    }
    public int all(Player a,int kolej){
        zaklad+=a.cash;
        a.cash=0;
        tzakladow[kolej]=-1;
        
        return 1;
    }
    
    public void fold(Player a, int kolej){
        tzakladow[kolej]=-2;
    }
    public void pulatoString(){
        System.out.println( "Pula"+" "+zaklad);
    }
    public int cmp(){
        int b=0;
        for(int i=0;i<g;i++){
            if(tzakladow[i]==max||tzakladow[i]<=-1){
                b=0;
            }else
                return 1;
        }
        return b;
    }
    public void wplata(Player a){
        a.cash+=zaklad;
    }
    
}